<?php

namespace App\Http\Controllers\Admin;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Admin\Rbac;
use App\Models\Admin\Tsso_session;
use App\Models\Admin\AdminAction;

const SECRET_KEY = '6A61750BB30490604B7DF6FD8DA9FA8E'; // 密码加密密钥
const PWD_VERSION = '2'; //密码版本号

class CommonController extends Controller {

	protected $user_info = array();
	protected $mobile = array();
    #api接口请求必要数据
    protected $ClientSource='Sandbox';
    protected $is_exper=0;
    protected $ClientSystem='20160303';
    protected $Version=3.1;

    protected $merchant_id;

	public function __construct(){
		// 初始化用户信息
		session_start();
		if(isset($_SESSION['admin_uid'])){
			$this->merchant_id = $_SESSION['admin_uid'];
		}
		if($this->merchant_id){
			$this->user_info = DB::table('ruzhu_merchant_basic')->select('id','CORPMAN_PHONE','logo','merchant_name')->where('id',$this->merchant_id)->first();
		}


		//记录用户行为日志
		// if(isset($_SERVER['HTTP_REFERER'])) {
		// 	$parse_url = $this->record_action($_SERVER['HTTP_REFERER']);
		// 	var_dump($parse_url);
		// }
		
		//权限控制
		// $node_list = $this->rbac_list();
		// dd($node_list);

		//有权限登录的用户
		$this->mobile = [
			'13618624473',
			'13826456161',
			'15220289012', //赵运会
            '18268068737'
		];
		view()->share('node_id', $this->merchant_id);
		view()->share('user_info', object2array($this->user_info));
		// view()->share('node_list', object2array($node_list));
	}

	/**
	 * 获取操作描述信息
	 **/
	public function get_action_remark($action) {
		if($action == 'direct_group_add') {
			return '添加系统套餐';
		}else if($action == 'direct_add') {

		}
	}

	/**
	 * 权限控制（权限列表）
	 **/
	// public function rbac_list() {
	// 	//如果用户的session存在
	// 	if(isset($_SESSION['admin_uid'])) {
	// 		//查询用户角色ID号
	// 		$role_user_info = DB::table('trbac_role_user')->where(['user_id'=>$_SESSION['admin_uid']])->first();
	// 		$role_id = $role_user_info->role_id;
	// 		if(!$role_id) {
	// 			$this->ajax_error('您没有任何权限');
	// 		}else if($role_id == 1) {
	// 			//查询用户权限列表
	// 			$status = [1,2];
	// 			$node_list = DB::table('trbac_node')->whereIn('status',$status)->get();
	// 			//将数据转换成二维数组
	// 			foreach($node_list as $key => $value) {
	// 				foreach($value as $k => $val) {
	// 					$node_arr[$key][$k] = $val;
	// 				}
	// 			}
	// 			$items = $this->make_tree($node_arr);
	// 			return $items;
	// 		}else {
	// 			//查询角色信息
	// 			$role_info = DB::table('trbac_role')->select('rules')->where(['id'=>$role_id])->first();
	// 			//查询用户权限列表
	// 			$status = [1,2];
	// 			$node_ids = explode(',', $role_info->rules);
	// 			$node_list = DB::table('trbac_node')->whereIn('id',$node_ids)->whereIn('status', $status)->where(['module'=>'admin'])->get();
	// 			$node_arr = array();
	// 			//将数据转换成二维数组
	// 			foreach($node_list as $key => $value) {
	// 				foreach($value as $k => $val) {
	// 					$node_arr[$key][$k] = $val;
	// 				}
	// 			}
	// 			$items = $this->make_tree($node_arr);
	// 			return $items;
	// 		}
	// 	}
	// }

	/**
	 * 无限极分类（分类树结构）
	 **/
	// function make_tree($list,$pk='id',$pid='pid',$child='_child',$root=0){
	//     $tree=array();
	//     $packData=array();
	//     foreach ($list as  $data) {
	//         $packData[$data[$pk]] = $data;
	//     }
	//     foreach ($packData as $key =>$val){     
	//         if($val[$pid]==$root){//代表跟节点       
	//             $tree[]=& $packData[$key];
	//         }else{
	//             //找到其父类
	//             $packData[$val[$pid]][$child][]=& $packData[$key];
	//         }
	//     }
	//     return $tree;
	// }

	/**
	 * 检测登录
	 */
	public function checkLogin(){
		if(!$this->merchant_id){
			header( "Location:".asset('user/login'));
			exit;
		}
		return DB::table('ruzhu_merchant_basic')->select('id','logo','CORPMAN_PHONE')->where('id',$this->merchant_id)->first();
	}

	/**
	 * 生成md5值密码
	 * @param $node_id  用户id
	 * @param $pwd 明文密码
	 * @return bool|string
	 */
	public function gen_password($node_id,$pwd){
		if(empty($pwd) || empty($node_id)){
			return false;
		}
		$md5 = md5(SECRET_KEY.$node_id.$pwd);
		return PWD_VERSION.$md5;
	}
	
	protected function ajax_return($var,$error_msg = '服务器错误，可刷新页面重试',$success_msg = '操作已成功完成',$data=array()){
		if($var === false){
			$this->ajax_error($error_msg,$data);
		}elseif($var === 0){
			$this->ajax_success('未修改任何信息',$data);
		}elseif(is_string($var) && !is_numeric($var)){
			$this->ajax_error($var,$data);
		}else{
			$this->ajax_success($success_msg,$data);
		}
	}
	protected function ajax_error($msg = '服务器错误，可刷新页面重试',$data=array()){
		$return = array('status'=>'0');
		$return['info'] = $msg;
		$return['data'] = $data;
		exit(json_encode($return));
	}
	protected function ajax_success($msg = '操作已成功完成',$data=array()){
		$return = array('status'=>'1');
		$return['info'] = $msg;
		$return['data'] = $data;
		exit(json_encode($return));
	}
	protected function ajax_info($msg = '提示',$data = array()){
		$return = array('status'=>'2');
		$return['info'] = $msg;
		$return['data'] = $data;
		exit(json_encode($return));
	}


	/*
     * curl走接口获取数据 get方式
     * array:要传递的数组
     * */
	protected function curl_get($url){

		$testurl = $url;
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $testurl);
		//参数为1表示传输数据，为0表示直接输出显示。
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		//参数为0表示不带头文件，为1表示带头文件
		curl_setopt($ch, CURLOPT_HEADER,0);
		$output = curl_exec($ch);
		curl_close($ch);
		return $output;
	}

	/*
     * curl走接口获取数据 post方式
     * array:要传递的数组
     * */
	protected function curl_post($url,$array){

		$curl = curl_init();
		//设置提交的url
		curl_setopt($curl, CURLOPT_URL, $url);
		//设置头文件的信息作为数据流输出
		curl_setopt($curl, CURLOPT_HEADER, 0);
		//设置获取的信息以文件流的形式返回，而不是直接输出。
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
		//设置post方式提交
		curl_setopt($curl, CURLOPT_POST, 1);
		//设置post数据
		$post_data = $array;
		curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
		//执行命令
		$data = curl_exec($curl);
		//关闭URL请求
		curl_close($curl);
		//获得数据并返回
		return $data;
	}

	/*
     * api post接口查询
     * */
	protected function api_post($data){
		#传参必须按顺序
		$arr_data['ClientSource']=$this->ClientSource;
		$arr_data['ClientSystem']=$this->ClientSystem;
		$str='';
		$arr_data = array_merge($arr_data , $data);
//		foreach($data as $k=>$v){
//			$arr_data[$k]=$v;
//		}
        ksort($arr_data);
        foreach($arr_data as $k=>$v){
			$str.=$k.'='.$v.'&';
		}
		$str=substr($str,0,strlen($str)-1);
		$arr_data['sign']=md5($str);
//		var_dump($arr_data);exit;
		$res=$this->curl_post(TEST_URL,$arr_data); #测试
//		 $res=$this->curl_post(OFFICIAL_URL,$arr_data); #正式
		return json_decode($res,true);

	}

	/*
     * 通过node_id获取用户最后一次登录的ticket
     * */
	protected function get_ticket($node_id){
		$sessionInfo=DB::table('tsso_session')
			->where('node_id','=',$node_id)
			->select('ticket')
			->orderBy('sid','desc')
			->first();
		if(!$sessionInfo) {
		    $time = time();
		    $con = [
		        'sid'           => Tsso_session::getNextSeq(),
		        'node_id'       => $node_id,
		        'session_id'    => session_id(),
                'status'        => 0,
                'ip_address'    => $_SERVER['REMOTE_ADDR'],
                'client_source' => 4,
                'client_system' => 'admin',
                'create_time'   => date('Y-m-d H:i:s',$time),
                'timeout'       => date('Y-m-d H:i:s',$time+(3*3600)),
                'ticket'        => $this->guid()
            ];
		    DB::table('tsso_session')->insert($con);
            $sessionInfo = DB::table('tsso_session')
                ->where('node_id','=',$node_id)
                ->select('ticket')
                ->orderBy('sid','desc')
                ->first();
        }
		return $sessionInfo->ticket;
	}

	/**
     * 生成ticket
     */
    function guid(){
        if (function_exists('com_create_guid')){
            return trim(com_create_guid(),'{}"');
        }else{
            mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
            $charid = strtoupper(md5(uniqid(rand(), true)));
            $hyphen = chr(45);// "-"
//		$uuid = chr(123)// "{"
//			.substr($charid, 0, 8).$hyphen
//			.substr($charid, 8, 4).$hyphen
//			.substr($charid,12, 4).$hyphen
//			.substr($charid,16, 4).$hyphen
//			.substr($charid,20,12)
//			.chr(125);// "}"
            $uuid = substr($charid, 0, 9).$hyphen
                .substr($charid, 8, 4).$hyphen
                .substr($charid,12, 4).$hyphen
                .substr($charid,16, 4).$hyphen
                .substr($charid,19,12);
            return $uuid;
        }
    }
}